 # -*- coding: utf-8 -*-
"""
Created on Fri Sep 17 10:29:29 2021
用 tf2 写一个从 任意态 态制备到 Bell 态的 DQN 算法
@author: Waikikilick
"""

import  os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2' #设置 tf 的报警等级
import tensorflow as tf
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers,optimizers,losses,initializers,Sequential,metrics,models
import copy 
from collections import deque
import random
from scipy.linalg import expm
from time import *

tf.random.set_seed(1)
np.random.seed(1)
random.seed (1)     

class env(object):
    def  __init__(self, 
        dt = np.pi / 2,
        noise_a = 0,
        ): 
        self.action_space = np.array(  [[1,1],
                                        [1,2],
                                        [1,3],
                                        [1,4],
                                        [1,5],
                                        [2,1],
                                        [2,2],
                                        [2,3],
                                        [2,4],
                                        [2,5],
                                        [3,1],
                                        [3,2],
                                        [3,3],
                                        [3,4],
                                        [3,5],
                                        [4,1],
                                        [4,2],
                                        [4,3],
                                        [4,4],
                                        [4,5],
                                        [5,1],
                                        [5,2],
                                        [5,3],
                                        [5,4],
                                        [5,5]] )
        self.n_actions = len(self.action_space)
        self.n_features = 8 #描述状态所用的长度
        self.target_psi =  np.mat([[1], [0], [0], [1]], dtype=complex)/np.sqrt(2) #最终的目标态为 |0>,  np.array([1,0,0,0])
        self.h_1 = 1
        self.h_2 = 1
        self.I = np.matrix(np.identity(2, dtype=complex))
        self.s_x = np.mat([[0, 1], [1, 0]], dtype=complex)
        self.s_z = np.mat([[1, 0], [0, -1]], dtype=complex)
        self.dt = dt
        self.training_set, self.validation_set, self.testing_set = self.psi_set()
        self.noise_normal_1 = np.array(
                  [ 1.62434536e+00, -6.11756414e-01, -5.28171752e-01, -1.07296862e+00,
                    8.65407629e-01, -2.30153870e+00,  1.74481176e+00, -7.61206901e-01,
                    3.19039096e-01, -2.49370375e-01,  1.46210794e+00, -2.06014071e+00,
                   -3.22417204e-01, -3.84054355e-01,  1.13376944e+00, -1.09989127e+00,
                   -1.72428208e-01, -8.77858418e-01,  4.22137467e-02,  5.82815214e-01,
                   -1.10061918e+00,  1.14472371e+00,  9.01590721e-01,  5.02494339e-01,
                    9.00855949e-01, -6.83727859e-01, -1.22890226e-01, -9.35769434e-01,
                   -2.67888080e-01,  5.30355467e-01, -6.91660752e-01, -3.96753527e-01,
                   -6.87172700e-01, -8.45205641e-01, -6.71246131e-01, -1.26645989e-02,
                   -1.11731035e+00,  2.34415698e-01,  1.65980218e+00,  7.42044161e-01,
                   -1.91835552e-01, -8.87628964e-01, -7.47158294e-01,  1.69245460e+00,
                    5.08077548e-02, -6.36995647e-01,  1.90915485e-01,  2.10025514e+00])
        
        self.noise_normal_2 = np.array(
                   [-4.16757847e-01, -5.62668272e-02, -2.13619610e+00,  1.64027081e+00,
                    -1.79343559e+00, -8.41747366e-01,  5.02881417e-01, -1.24528809e+00,
                    -1.05795222e+00, -9.09007615e-01,  5.51454045e-01,  2.29220801e+00,
                     4.15393930e-02, -1.11792545e+00,  5.39058321e-01, -5.96159700e-01,
                    -1.91304965e-02,  1.17500122e+00, -7.47870949e-01,  9.02525097e-03,
                    -8.78107893e-01, -1.56434170e-01,  2.56570452e-01, -9.88779049e-01,
                    -3.38821966e-01, -2.36184031e-01, -6.37655012e-01, -1.18761229e+00,
                    -1.42121723e+00, -1.53495196e-01, -2.69056960e-01,  2.23136679e+00,
                    -2.43476758e+00,  1.12726505e-01,  3.70444537e-01,  1.35963386e+00,
                     5.01857207e-01, -8.44213704e-01,  9.76147160e-06,  5.42352572e-01,
                    -3.13508197e-01,  7.71011738e-01, -1.86809065e+00,  1.73118467e+00,
                     1.46767801e+00, -3.35677339e-01,  6.11340780e-01,  4.79705919e-02])
    
        
        self.noise_constant = np.ones(41)
        
    def psi_set(self):
        
        alpha_num = 4
        
        theta = [np.pi/8,np.pi/4,3*np.pi/8]
        theta_1 = theta
        theta_2 = theta
        theta_3 = theta
        
        alpha = np.linspace(0,np.pi*2,alpha_num,endpoint=False)
        alpha_1 = alpha
        alpha_2 = alpha
        alpha_3 = alpha
        alpha_4 = alpha
        
        psi_set = []#np.matrix([[0,0,0,0]],dtype=complex) #第一行用来占位，否则无法和其他行并在一起，在最后要注意去掉这一行
        for ii in range(3): #theta_1
            for jj in range(3): #theta_2
                for kk in range(3): #theta_3
                    for mm in range(alpha_num): #alpha_1
                        for nn in range(alpha_num): #alpha_2
                            for oo in range(alpha_num): #alpha_3
                                for pp in range(alpha_num): #alpha_4
                                    
                                    a_1_mo = np.cos(theta_1[ii])
                                    a_2_mo = np.sin(theta_1[ii])*np.cos(theta_2[jj])
                                    a_3_mo = np.sin(theta_1[ii])*np.sin(theta_2[jj])*np.cos(theta_3[kk])
                                    a_4_mo = np.sin(theta_1[ii])*np.sin(theta_2[jj])*np.sin(theta_3[kk])
                                    
                                    a_1_real = a_1_mo*np.cos(alpha_1[mm])
                                    a_1_imag = a_1_mo*np.sin(alpha_1[mm])
                                    a_2_real = a_2_mo*np.cos(alpha_2[nn])
                                    a_2_imag = a_2_mo*np.sin(alpha_2[nn])
                                    a_3_real = a_3_mo*np.cos(alpha_3[oo])
                                    a_3_imag = a_3_mo*np.sin(alpha_3[oo])
                                    a_4_real = a_4_mo*np.cos(alpha_4[pp])
                                    a_4_imag = a_4_mo*np.sin(alpha_4[pp])
                                    
                                    a_1_complex = a_1_real + a_1_imag*1j
                                    a_2_complex = a_2_real + a_2_imag*1j
                                    a_3_complex = a_3_real + a_3_imag*1j
                                    a_4_complex = a_4_real + a_4_imag*1j
                                    
                                    a_complex = np.mat([[ a_1_complex], [a_2_complex], [a_3_complex], [a_4_complex]])
                                    # psi_set = np.row_stack((psi_set,a_complex))
                                    psi_set.append(a_complex)
                                    
        # psi_set = np.array(np.delete(psi_set,0,axis=0)) # 删除矩阵的第一行
        random.shuffle(psi_set) #打乱顺序
    
        training_set = psi_set[0:256]
        validation_set = psi_set[256:512]
        testing_set = psi_set[512:1536]
        
        return training_set, validation_set, testing_set
        
    
    def reset(self, init_psi): # 在一个新的回合开始时，归位到开始选中的那个点上
        
        init_state = np.array(init_psi.real.tolist() + init_psi.imag.tolist()) # 实向量形式
        # np.array([1实，2实，1虚，2虚])
        return init_state
    
    
    def step(self, state, action, nstep):
        
        psi = np.mat((np.array([state[0:int(len(state) / 2)] + state[int(len(state) / 2):int(len(state))] * 1j]).T).squeeze(0))  # 从 实向量 变回 复矩阵 形式
        #matrix([[ 1实 + 1虚j],
        #        [ 2实 + 2虚j]])
        
        J_1, J_2 =  self.action_space[action,0], self.action_space[action,1]  # control field strength
        J_12 = J_1 * J_2 /2
        
        H =  (J_1*np.kron(self.s_z, self.I) + J_2*np.kron(self.I, self.s_z) + \
                        J_12/2*np.kron((self.s_z-self.I),(self.s_z-self.I)) + \
           self.h_1*np.kron(self.s_x,self.I) + self.h_2*np.kron(self.I,self.s_x))/2
        U = expm(-1j * H * self.dt) 
        psi = U * psi  # next state

        err = 10e-4
        fid = (np.abs(psi.H * self.target_psi) ** 2).item(0).real  
        
        done = (((1 - fid) < err) or nstep >= 20 * np.pi / self.dt)  
    
        state = np.array(psi.real.tolist() + psi.imag.tolist()) # 实向量形式

        return state, done, fid      

def relu(vector):
    for i in range(len(vector)):
        vector[i] = np.maximum(0,vector[i])
    return vector

def agent_matrix(x):
    out = np.mat(x).T * net[0].numpy() + net[1].numpy()
    out = relu(out)
    out = out * net[2].numpy() + net[3].numpy()
    out = relu(out)
    out = out * net[4].numpy() + net[5].numpy()
    out = relu(out)
    out = out * net[6].numpy() + net[7].numpy()
    out = relu(out)
    action = np.argmax(out)
    return action

def testing_time(): # 测试 测试集中的点 得到 保真度 分布
    print('\n时间测试中, 请稍等...')
    
    data = []
    
    testing_set = env.testing_set
    fid_list = []
    
    for test_init_psi in testing_set:
        
        fid_max = 0
        fid_list_tem = []
        observation = env.reset(test_init_psi)
        nstep = 0 
        start_time = time()
        while True:
            action = agent_matrix(observation) 
            observation, done, fid = env.step(observation, action, nstep)  
            nstep += 1
            fid_list_tem.append(fid)
            if done:
                end_time = time()
                break
        
        test_fid = max(fid_list_tem)
        max_point = fid_list_tem.index(max(fid_list_tem))
        test_time = (end_time - start_time)*max_point/len(fid_list_tem)
        data.append((test_time,test_fid))
        
    return data
       
    
if __name__ == "__main__":
    
    dt = np.pi/2
    
    network = keras.models.load_model('dqn_tf2_two_qubit_to_Bell_saved_model') #导入训练好的网络 
    net = network.trainable_variables
    
    env = env(dt = dt)
    
    testing_set = env.testing_set          

    # 测试
    data = testing_time()
    data.sort()
    
    time = 0
    fid = 0
    time_list = []
    fid_list = []
    
    for i in data:
        time += i[0]
        time_list.append(i[0])
        fid += i[1]
        fid_list.append(i[1])
        
    print('the mean time is: ', time/len(testing_set))
    print('the mean fid is: ', fid/len(testing_set))

    for i in (data):
        print(i)  
        
    # print(np.array(time_list))
    # print(np.array(fid_list))
    
# 结果为

    # the mean time is:  0.050900429862028994
    # the mean fid is:  0.9695494667544582  
     
    # (0.0, 0.9492221715200789)
    # (0.0, 0.950890868606519)
    # (0.0019715588267256575, 0.9445309297604396)
    # (0.002359553081233327, 0.9641690296200202)
    # (0.00245684530676865, 0.9516949781283255)
    # (0.003842493382895865, 0.9630310943546337)
    # (0.0038923519413645675, 0.9518881547480794)
    # (0.005765048468985208, 0.9790339087614828)
    # (0.0060573787224002, 0.9874383885929499)
    # (0.007492135210735042, 0.9628608999433773)
    # (0.007492204991782584, 0.972475732082799)
    # (0.007978951058736661, 0.956919816581532)
    # (0.008176757068168826, 0.9770153794469524)
    # (0.008997248440254025, 0.9836272334900124)
    # (0.009343565964117282, 0.9615318097568956)
    # (0.009486820639633551, 0.9462878821579253)
    # (0.009632738625131003, 0.9723314715819087)
    # (0.009739660635227111, 0.9868588201609063)
    # (0.009739776936973013, 0.9453471877462639)
    # (0.009827357966725419, 0.9468299296832781)
    # (0.009855439023273746, 0.9783635808691036)
    # (0.009924865350490662, 0.9762060220309686)
    # (0.009977904761709818, 0.9747664092182923)
    # (0.009979794665080746, 0.9730739706291274)
    # (0.010119391650688358, 0.958482501727599)
    # (0.010216457087819169, 0.9643879971821818)
    # (0.010367230671208079, 0.9682915300821794)
    # (0.010459801045859732, 0.9900479052082451)
    # (0.010801268786918826, 0.9452018410411341)
    # (0.010946308694234708, 0.9363239599019856)
    # (0.010946308694234708, 0.9560631247005359)
    # (0.010950914243372476, 0.9688958509882035)
    # (0.011092290645692407, 0.9858247150562861)
    # (0.011093162908786681, 0.9462658935155939)
    # (0.011246506760760052, 0.9534335368479788)
    # (0.011821991059838272, 0.9640696091431112)
    # (0.0118230377755514, 0.973078090182624)
    # (0.01196797301129597, 0.9744200410535313)
    # (0.011971741187863233, 0.9484437744534475)
    # (0.012166441940679782, 0.9608645095655037)
    # (0.012405820009185047, 0.9591678930039369)
    # (0.012766820628468583, 0.971227846255884)
    # (0.013451820466576553, 0.9258239726414745)
    # (0.013622092037666135, 0.979206209112705)
    # (0.0136221327432772, 0.942193744403748)
    # (0.01363084374404535, 0.9935296556189361)
    # (0.013715592826285013, 0.9506009242912188)
    # (0.013793421954643436, 0.9576298487877519)
    # (0.01379810309991604, 0.9850711296203701)
    # (0.013816647413300305, 0.9398867312506346)
    # (0.013955145347409131, 0.9514922784580822)
    # (0.01401123186437095, 0.9684159389527421)
    # (0.014312581318180735, 0.9744396261406643)
    # (0.014395132297422827, 0.9841206527277394)
    # (0.014590449449492664, 0.9371614557046279)
    # (0.014795256824028201, 0.9373233621050665)
    # (0.014886704886831888, 0.9547835040789964)
    # (0.014887018901545828, 0.9840274470316565)
    # (0.014984270421470084, 0.9618418726790988)
    # (0.01517448192689477, 0.9675998548989073)
    # (0.015178738570794827, 0.9517186448547215)
    # (0.015474331088182403, 0.939035962604595)
    # (0.015495160730873666, 0.9759062427060815)
    # (0.015526283078077362, 0.9652570451477019)
    # (0.015963298518483233, 0.9851563831645207)
    # (0.016153196009193977, 0.9390938235237314)
    # (0.016204310626518434, 0.962661891406148)
    # (0.016419567712923376, 0.9727632090017558)
    # (0.01644091489838391, 0.982752512085415)
    # (0.0164656755400867, 0.9490072207689018)
    # (0.01651674945180009, 0.9424821427498988)
    # (0.016534944859946648, 0.9704019463792413)
    # (0.016638331296967297, 0.9583600150042967)
    # (0.016638383632752954, 0.9896174126977874)
    # (0.016644088233389507, 0.9685175478152601)
    # (0.01685712977153499, 0.9748828242326144)
    # (0.016857304224153845, 0.9412818913933496)
    # (0.017291272558817048, 0.9757571988793806)
    # (0.0172961397868831, 0.972668702428865)
    # (0.017708976094315692, 0.9736153444802778)
    # (0.017919121718988185, 0.944344181232226)
    # (0.017951802509586987, 0.9769628051403899)
    # (0.01795232586744355, 0.9812503519884898)
    # (0.018000719023913873, 0.989868762644679)
    # (0.018165018500351324, 0.9549788444672571)
    # (0.0181709324441305, 0.9596176385405883)
    # (0.018608616619575316, 0.9512274800284741)
    # (0.018730338026837604, 0.9471168902795417)
    # (0.018730338026837604, 0.9892874142485489)
    # (0.01874134017200005, 0.9633516234074794)
    # (0.018763891080530677, 0.973192441041569)
    # (0.018827694218333173, 0.9612375129868315)
    # (0.01897358312839415, 0.9790638849569555)
    # (0.018997954159248168, 0.9435175046436193)
    # (0.01904666714551972, 0.9768920965183967)
    # (0.019071253334603657, 0.9740742724139952)
    # (0.019217060833442504, 0.9830212879292934)
    # (0.019218863510504003, 0.961420864218428)
    # (0.019219386868360566, 0.9621024667955472)
    # (0.019259010873189788, 0.9559480069609942)
    # (0.01926026693204554, 0.9830018620685306)
    # (0.019365636313833843, 0.9796493055877397)
    # (0.019479146817835365, 0.9828414612029183)
    # (0.019533093382672565, 0.9920867874643208)
    # (0.01970343473480969, 0.9385270077956556)
    # (0.019704423299649866, 0.9295713859985039)
    # (0.019704772204887575, 0.9580474012453285)
    # (0.019843124761814025, 0.9614760654585746)
    # (0.019849265493997712, 0.9588387055423603)
    # (0.020070087618944122, 0.9740252958152927)
    # (0.02019393734815644, 0.994371688081737)
    # (0.020335802217809167, 0.9794870102002853)
    # (0.020605546672169756, 0.9633415397379372)
    # (0.020614246042763313, 0.9855143362453856)
    # (0.020627603298280298, 0.9426798308433337)
    # (0.02072511068204554, 0.9678965510418783)
    # (0.021155142202609924, 0.9858206060419766)
    # (0.021236396417385194, 0.9800819121242379)
    # (0.021406016698697718, 0.9814963557715262)
    # (0.02140934292863055, 0.9611206912735271)
    # (0.021420856801474968, 0.9781125883471997)
    # (0.0214211766312762, 0.9772598058421627)
    # (0.021675825119018555, 0.9763897553349853)
    # (0.02168522811517483, 0.9516726751978001)
    # (0.021941219888082366, 0.9520370001237838)
    # (0.022135909010724323, 0.975054063118516)
    # (0.022184581291384814, 0.9890102900745428)
    # (0.022184651072432355, 0.9895448767751068)
    # (0.022186465379668445, 0.9857473373328839)
    # (0.02246789234440501, 0.9576695021584508)
    # (0.022486174978860993, 0.9694804548019387)
    # (0.022549396607933973, 0.984618842101112)
    # (0.02276753216255002, 0.9723437629201249)
    # (0.02276795084883527, 0.9898226922291037)
    # (0.022768509097215606, 0.9760324615644065)
    # (0.022777650414443597, 0.9821162299705676)
    # (0.0229871854549501, 0.9784612852774656)
    # (0.023011690232811903, 0.9706859294467158)
    # (0.023062775774699885, 0.9909328085470729)
    # (0.02335983369408584, 0.981883996417362)
    # (0.023359961626006336, 0.966471453741247)
    # (0.023424817294609254, 0.9786745170592002)
    # (0.023642586498725707, 0.9839470209276605)
    # (0.023655635554616045, 0.9825795145662845)
    # (0.02366456752870141, 0.9976155436327522)
    # (0.023735523223876953, 0.9562734897794091)
    # (0.024081904713700458, 0.9630294305012439)
    # (0.02408202101544636, 0.9752486291897413)
    # (0.024219047732469513, 0.9382463469186897)
    # (0.024227909925507336, 0.9521839455620943)
    # (0.024254426723573266, 0.9644104446920426)
    # (0.024349363838754048, 0.9699229572431662)
    # (0.024351782915068836, 0.9698661211919104)
    # (0.024370152775834247, 0.9780470145771414)
    # (0.02453215529279011, 0.9781867525476239)
    # (0.024561474962932307, 0.9631142142570108)
    # (0.02464288618506455, 0.9735930866080826)
    # (0.024678811794374048, 0.9860739631002905)
    # (0.02481337291438405, 0.9879433182137849)
    # (0.024839831561577028, 0.9903741547875766)
    # (0.02486013784641173, 0.9692245599031872)
    # (0.025055059572545495, 0.9788646575548879)
    # (0.025144187415518413, 0.9915071343909029)
    # (0.0253005144072742, 0.9814487951344796)
    # (0.02554138695321432, 0.9592518337298216)
    # (0.02554783006993736, 0.9864617569519276)
    # (0.025623914672107232, 0.96486406601423)
    # (0.025628299247927783, 0.9833441005207045)
    # (0.025881930095393482, 0.9487598304811506)
    # (0.025882011506615614, 0.987464218373454)
    # (0.025932724882916706, 0.9744229032688438)
    # (0.026222391826350513, 0.9686155174852449)
    # (0.026222473237572645, 0.9742131031497103)
    # (0.026222525573358302, 0.9768599314644792)
    # (0.026222717471239044, 0.958822371437635)
    # (0.026260585319705126, 0.9797252019951669)
    # (0.026262184468711296, 0.9755901899482676)
    # (0.026554875257538586, 0.9774819850090832)
    # (0.02656301637975181, 0.948253778372715)
    # (0.026563097790973943, 0.9540651524280183)
    # (0.026563097790973943, 0.9604887799441012)
    # (0.026563097790973943, 0.9634151449416948)
    # (0.026713708551918586, 0.981756316802563)
    # (0.026757984626583936, 0.9863935291240569)
    # (0.026901117185267005, 0.9571581880039128)
    # (0.026903559521930975, 0.9900419695788986)
    # (0.02691577120525081, 0.9773111052185187)
    # (0.026943997638981518, 0.9877262129546852)
    # (0.027156550709794208, 0.9641568504082653)
    # (0.02725444188932093, 0.96770297372449)
    # (0.02729267608828661, 0.9707928139965721)
    # (0.027365771735586773, 0.9535210279061774)
    # (0.027560309665959057, 0.9580822691559334)
    # (0.027561908814965223, 0.9628481456086659)
    # (0.027584808628733564, 0.9607991536892442)
    # (0.02758790225517459, 0.9335868394506602)
    # (0.027606871069931403, 0.9607016911054425)
    # (0.027716770404722632, 0.9639727036904016)
    # (0.02773063938792159, 0.9626373699447058)
    # (0.02774093209243402, 0.9776482834671109)
    # (0.028119843180586652, 0.9807677951372137)
    # (0.02828185151262981, 0.9660128439015117)
    # (0.028460461918900653, 0.9911272457592305)
    # (0.02847232469698278, 0.9751843433116206)
    # (0.028473894770552472, 0.9471685443705978)
    # (0.02860627523282679, 0.9459972475690708)
    # (0.02862327854807784, 0.9631497270632534)
    # (0.028631431300465655, 0.9671063846114012)
    # (0.028825416797544898, 0.9866450069804356)
    # (0.02883736680193645, 0.9914203739572288)
    # (0.02894917930044779, 0.9633641811834243)
    # (0.029166111131993737, 0.9642795279375294)
    # (0.029176014225657392, 0.9816969236986925)
    # (0.0291900634765625, 0.9566177059132306)
    # (0.029211567669380004, 0.9623777346270699)
    # (0.02948186455703363, 0.9676952872476723)
    # (0.029555152102214533, 0.9759941213272328)
    # (0.02972538296769305, 0.9593454806360907)
    # (0.029764268456435785, 0.9755748218753381)
    # (0.029774526270424446, 0.9851334853302545)
    # (0.0299198453019305, 0.9834422536930509)
    # (0.029927433990850683, 0.9769429972043736)
    # (0.03007470107660061, 0.9752246057579441)
    # (0.030187606811523438, 0.9532855018558218)
    # (0.030187606811523438, 0.9939907226701783)
    # (0.030209954191998737, 0.9727906160183184)
    # (0.030315678294112042, 0.9446809761170094)
    # (0.03036861884884718, 0.9624940335918282)
    # (0.030515624255668825, 0.9768156549975539)
    # (0.030649371263457507, 0.9543675194722798)
    # (0.030649580606600134, 0.9650950673760416)
    # (0.030674038863763575, 0.967109764673235)
    # (0.030674114459898413, 0.9589414666057554)
    # (0.030767952523580413, 0.9809868040648643)
    # (0.030990333091921923, 0.9553374693695931)
    # (0.030990728517857995, 0.9828120763584185)
    # (0.031014640156815692, 0.9545293903749882)
    # (0.031017210425400153, 0.9757283231131276)
    # (0.03108766602306831, 0.9757296279780694)
    # (0.03110399478819312, 0.982772130849979)
    # (0.031136117330411585, 0.9792190410119251)
    # (0.03127656331876429, 0.9627329654241463)
    # (0.0313930976681593, 0.9511283727788402)
    # (0.03142815682946182, 0.9651033114969361)
    # (0.03153442754978087, 0.943302040085757)
    # (0.03162299714437345, 0.9698963884074775)
    # (0.03168296813964844, 0.9639257430409991)
    # (0.03175167921112805, 0.9681455523940461)
    # (0.031841673502107946, 0.961714144382254)
    # (0.031841673502107946, 0.9705734638924791)
    # (0.03202959386313834, 0.9731980624949744)
    # (0.032255190174754075, 0.973271144590193)
    # (0.03225535881228563, 0.9728439920038262)
    # (0.03227535689749369, 0.9602025617115684)
    # (0.032316068323647106, 0.995040766966249)
    # (0.032325930711699695, 0.9698634703323638)
    # (0.032326302877286585, 0.9779520936359466)
    # (0.03235249403046399, 0.9746945518904855)
    # (0.032571501848174304, 0.9861933757270926)
    # (0.0326929790217702, 0.9700360455986841)
    # (0.032693165104563646, 0.9767812357935467)
    # (0.032716890660727894, 0.9810679399591852)
    # (0.03284217090141482, 0.9743130328810692)
    # (0.03309576685835675, 0.9852633249826432)
    # (0.033096557710228895, 0.9583096102295444)
    # (0.03310367537707817, 0.9569400776275945)
    # (0.03310851934479504, 0.979118352563255)
    # (0.0331623961285847, 0.9392381986271153)
    # (0.03319910095959175, 0.9890399491483393)
    # (0.03320371232381681, 0.9566071341453536)
    # (0.03327681378620427, 0.9693977579451929)
    # (0.033276976608648534, 0.9789438247666241)
    # (0.03329770157976848, 0.973154536045388)
    # (0.03347154942954459, 0.993292820935184)
    # (0.033495740192692455, 0.9684762747263831)
    # (0.03349603676214451, 0.9800436421770866)
    # (0.03349890360018102, 0.9684930189390568)
    # (0.033515511489496, 0.9657599144572165)
    # (0.03371335238945193, 0.9853219089441962)
    # (0.0337148294216249, 0.963139565882307)
    # (0.03373831655921006, 0.9672373197713761)
    # (0.03378301713524795, 0.9819399684299926)
    # (0.033909256865338584, 0.9702967334661654)
    # (0.03392794074081793, 0.937368352569244)
    # (0.03393703553734756, 0.952390773494759)
    # (0.034204349285218774, 0.9817172392931874)
    # (0.03439550864987257, 0.9663427268478404)
    # (0.03450417518615723, 0.9712028961500342)
    # (0.03468032581050221, 0.9780295982763467)
    # (0.03473645884816239, 0.9793719768462391)
    # (0.03502080498672113, 0.9939947788614842)
    # (0.035056602664110134, 0.9332413866213836)
    # (0.035076513523008765, 0.9711628720773618)
    # (0.035125587044692624, 0.936048496370052)
    # (0.035125587044692624, 0.9469466554615227)
    # (0.03512602899132705, 0.9631861200053101)
    # (0.035127232714397154, 0.9879756147018699)
    # (0.03515366228615365, 0.949450946098101)
    # (0.03541681243152153, 0.9643812152277016)
    # (0.03541762654374286, 0.9707883619556735)
    # (0.035579524389127405, 0.9919716953149464)
    # (0.03558764225099145, 0.9552051926501224)
    # (0.03558764225099145, 0.9653561016432474)
    # (0.03558775273765006, 0.9725387101735848)
    # (0.035611065422616356, 0.9530926667963133)
    # (0.03575790219190644, 0.9676960595894843)
    # (0.03575816968592202, 0.942737983054378)
    # (0.035916374950874144, 0.95588594263744)
    # (0.0359184683823004, 0.9572222831168576)
    # (0.03605301205704852, 0.9264022535844919)
    # (0.036093671147416274, 0.9935420689502977)
    # (0.03618333397842035, 0.9697177773208606)
    # (0.03626906581041289, 0.9501044799082434)
    # (0.036488073628123216, 0.9706352918253242)
    # (0.03651506726334735, 0.9914221579240903)
    # (0.03677960139949147, 0.9321790085725654)
    # (0.03685215624367318, 0.9532164483545588)
    # (0.03697436030318097, 0.9746026097133542)
    # (0.03697441845405393, 0.9589151936944855)
    # (0.03700165050785716, 0.9528042275511999)
    # (0.0370310399590469, 0.9660438083415941)
    # (0.0370406522983458, 0.9742804923435824)
    # (0.03743486869625929, 0.976296902219558)
    # (0.037454866781467346, 0.9758818703267375)
    # (0.03747381815096227, 0.9531670441426189)
    # (0.037582327679889956, 0.9645217066556873)
    # (0.03765831924066311, 0.9569972266431052)
    # (0.03791084522154273, 0.9737047717284398)
    # (0.038141762338033534, 0.9656926592437798)
    # (0.038312202546654676, 0.9537708483500781)
    # (0.03837323188781738, 0.9880160887062723)
    # (0.038418304629442165, 0.956526883734484)
    # (0.0384340053651391, 0.9815704113647565)
    # (0.0384820612465463, 0.9503275698157341)
    # (0.03873908810499238, 0.9727137876298365)
    # (0.03882277302625703, 0.956110247570133)
    # (0.03883938091557201, 0.9831373701558478)
    # (0.03884777208653892, 0.9826672189683561)
    # (0.038910470357755335, 0.9870406773327558)
    # (0.038939103847596704, 0.9443270098365764)
    # (0.038943988520924636, 0.9718341309671391)
    # (0.03896891198507169, 0.9764928282745148)
    # (0.0391425156011814, 0.9849539828406734)
    # (0.03929975556164253, 0.9617985652746885)
    # (0.03930878057712462, 0.9882352661001755)
    # (0.03933444255735816, 0.9597310549165566)
    # (0.03960132598876953, 0.9782370312320328)
    # (0.039698437946598705, 0.9807651448931359)
    # (0.039698437946598705, 0.9816809195363788)
    # (0.03984489092012731, 0.9894978733133123)
    # (0.039866994066936216, 0.9759708149475103)
    # (0.03989370857797018, 0.9877059410822148)
    # (0.039897430233839085, 0.9849032960238079)
    # (0.03995127794219226, 0.9435148313316934)
    # (0.0400877231504859, 0.9445069437678345)
    # (0.04013646521219393, 0.9925253059605713)
    # (0.04020952015388303, 0.967368108579461)
    # (0.04037158082171184, 0.9689199634303126)
    # (0.04046305214486471, 0.9790552578880258)
    # (0.04052552362767661, 0.9876804888101519)
    # (0.04067173236753882, 0.9936185081431367)
    # (0.04068299037654225, 0.9495555043205757)
    # (0.04073137190283799, 0.9346600444519725)
    # (0.040748805534548876, 0.9783533837031748)
    # (0.04089099604909013, 0.956794375537141)
    # (0.04089169385956555, 0.986974659557769)
    # (0.040896561087631594, 0.9692984481523875)
    # (0.040940127721646936, 0.9691740817949346)
    # (0.04095288020808522, 0.9462074320223607)
    # (0.0411724113836521, 0.9534211555229931)
    # (0.041225037923673304, 0.9797759805383167)
    # (0.041227724494003665, 0.9700144653302692)
    # (0.04123233004314143, 0.9864709076388192)
    # (0.04134217704214701, 0.9804418895426283)
    # (0.04138002163026391, 0.9774619598069537)
    # (0.04139150061258456, 0.9705007777713371)
    # (0.04190634518134885, 0.9424520020249697)
    # (0.04196098374157417, 0.9636586088341921)
    # (0.04196098374157417, 0.981044539260151)
    # (0.04197851622976908, 0.9711853340989786)
    # (0.04217978803122916, 0.9797822717785972)
    # (0.042180381170133265, 0.9699877793644398)
    # (0.04227702210589153, 0.987992782636805)
    # (0.042280348335824364, 0.958426460345596)
    # (0.04237722769016173, 0.9629998689439851)
    # (0.042538102080182334, 0.963487054351369)
    # (0.042813056852759386, 0.9530024895537214)
    # (0.04300889736268579, 0.9753626137442868)
    # (0.043083656124952366, 0.9351597447596073)
    # (0.04320088828482279, 0.9459627674269954)
    # (0.04320130697110804, 0.9781536630086836)
    # (0.04321917091927877, 0.9762866388658825)
    # (0.04334910322980183, 0.9732679750163906)
    # (0.04342043690565156, 0.9870500799182065)
    # (0.04342073347510361, 0.9784898274331915)
    # (0.043774767619807545, 0.951697217198546)
    # (0.04378526966746261, 0.9785070673258954)
    # (0.04378547901060523, 0.9870617677085488)
    # (0.043789282077696265, 0.9716315377483452)
    # (0.04383395357829768, 0.9919728104857269)
    # (0.04391890037350538, 0.9562987367708553)
    # (0.04419857118187881, 0.991857498070776)
    # (0.044198838675894386, 0.9516252953916267)
    # (0.044267386924929736, 0.9412653072103636)
    # (0.04436801701057248, 0.9819856190295351)
    # (0.04436930214486471, 0.9624419403973081)
    # (0.044372651635146726, 0.9788452125838618)
    # (0.04439339405152856, 0.981052653106294)
    # (0.04439623762921589, 0.9819281169578973)
    # (0.04441621826916206, 0.9667146384770311)
    # (0.044672151891196644, 0.9692864857886966)
    # (0.044806050091255004, 0.9846499230127308)
    # (0.04483228195004347, 0.9689269419841018)
    # (0.04495281126441025, 0.9806504009266432)
    # (0.04495309038860042, 0.9766359369718762)
    # (0.044981700618092604, 0.9687657262232743)
    # (0.04507460245272008, 0.9821206642959455)
    # (0.045098165186440074, 0.9653855981308668)
    # (0.04509858387272533, 0.9619414580588735)
    # (0.0450992119021532, 0.9507944139748988)
    # (0.04509931657372451, 0.973108144729048)
    # (0.04510444548071885, 0.9628701451791069)
    # (0.045250497213224085, 0.9859811503433378)
    # (0.04534705673776022, 0.982963624367975)
    # (0.04548824124219941, 0.9776942915219112)
    # (0.04548900883372237, 0.9747826793272151)
    # (0.04552194548816216, 0.9441036115725885)
    # (0.04552271307968512, 0.9667151083670411)
    # (0.04553687863233613, 0.9944052448389725)
    # (0.045541065495188646, 0.980704139180703)
    # (0.04554860184832317, 0.9625814285381681)
    # (0.045561755575784825, 0.9929529775858368)
    # (0.04574147666372904, 0.9813704651294596)
    # (0.04575561895603087, 0.9487643092729476)
    # (0.04587722987663455, 0.978535597521013)
    # (0.045910532881573936, 0.9744817729849703)
    # (0.045974423245685854, 0.9581568999243959)
    # (0.04601544868655321, 0.969500304305104)
    # (0.04614955622975419, 0.9753422460941968)
    # (0.04619891469071551, 0.9733078782231199)
    # (0.04670459468190263, 0.9780148886975413)
    # (0.046825408935546875, 0.9586455533699412)
    # (0.046825408935546875, 0.9753288987729928)
    # (0.04685026261864639, 0.98987088471899)
    # (0.04686291624860066, 0.9647745320443835)
    # (0.04687251114263767, 0.9744278427713822)
    # (0.047287545553067835, 0.9564879336567164)
    # (0.04742266492145818, 0.9647989615340011)
    # (0.04743415553395341, 0.9757037063768353)
    # (0.047434248575350134, 0.960419601579977)
    # (0.047437935340695264, 0.9858151353816591)
    # (0.047450333106808545, 0.9815171104889391)
    # (0.04745968958226646, 0.9707506471441397)
    # (0.047477280221334316, 0.9868082412051004)
    # (0.04758947651560714, 0.9805976758020981)
    # (0.04760428172786061, 0.9710308967609236)
    # (0.04803169064405488, 0.9680048898279567)
    # (0.048042361329241494, 0.9778649187406321)
    # (0.048042506706423876, 0.976074618231577)
    # (0.04807052379701196, 0.9578672441202264)
    # (0.04807052379701196, 0.988138249792448)
    # (0.048148806502179405, 0.9585095414413757)
    # (0.048163809427400915, 0.9729298761109164)
    # (0.04852861311377549, 0.9510744218225885)
    # (0.04852894457375131, 0.9727873132943723)
    # (0.04865032870595048, 0.958240337519427)
    # (0.04865032870595048, 0.9839500741361936)
    # (0.04865053223400581, 0.9663615839525093)
    # (0.04866262761557975, 0.9918277431452487)
    # (0.04869903006204745, 0.966180968864563)
    # (0.0488827868205745, 0.99249225432206)
    # (0.049039677875797924, 0.9523757657493066)
    # (0.04903988721894055, 0.9733294691208955)
    # (0.049040288459963916, 0.9863878649429282)
    # (0.04914079061368617, 0.9858604763506824)
    # (0.049243612987239185, 0.977305472152613)
    # (0.04933146732609447, 0.986044904409617)
    # (0.04945316547300757, 0.9512245163517361)
    # (0.049870188643292686, 0.9846374958074166)
    # (0.04991499389090189, 0.9761934521935222)
    # (0.04991530790561583, 0.9369823664742184)
    # (0.04996269505198409, 0.956532163840856)
    # (0.049963602205602135, 0.968002679893566)
    # (0.05006081883500262, 0.982124979005545)
    # (0.050085515510745166, 0.9672868595703124)
    # (0.05037727588560523, 0.9516584486380453)
    # (0.050500834860452794, 0.9567189678241333)
    # (0.05051057513167218, 0.9713817775834417)
    # (0.050571912672461534, 0.9512111240094864)
    # (0.05057261048293695, 0.9677985591585027)
    # (0.050576622893170615, 0.9824527636378958)
    # (0.050596190661918825, 0.9850009206442134)
    # (0.05061962546371832, 0.9866807974170223)
    # (0.050796322706269055, 0.9832964603238397)
    # (0.05082111823849562, 0.9699797362001683)
    # (0.05108098285954173, 0.9895566909627708)
    # (0.051082611083984375, 0.9451903985096565)
    # (0.051083669429872094, 0.9500903483691627)
    # (0.051095311234637, 0.9782851818668897)
    # (0.051209880084526246, 0.9392826179095761)
    # (0.05122851743930724, 0.9505005943256601)
    # (0.0512458638447087, 0.9579437172119992)
    # (0.05134634273808177, 0.986943474044446)
    # (0.051375156495629286, 0.97230128055231)
    # (0.05151960907912836, 0.9781629493226571)
    # (0.05156796152998761, 0.9863188303404111)
    # (0.051581051291489016, 0.9843544986793358)
    # (0.05158837830148092, 0.9825678352587465)
    # (0.051593385091642054, 0.9480848661614814)
    # (0.05169496303651391, 0.9537787664500631)
    # (0.051763860190786964, 0.9820870660052933)
    # (0.051861216382282534, 0.9667930860960691)
    # (0.05187727183830447, 0.9875601072182039)
    # (0.05188559322822385, 0.9393274397228094)
    # (0.05189266437437476, 0.979402813258908)
    # (0.05189961921877977, 0.9815320808310032)
    # (0.05191042365097418, 0.9675428306941972)
    # (0.05194626784906155, 0.9940247963721166)
    # (0.05210529885640958, 0.9789534649813774)
    # (0.052314851342177976, 0.9586799285065071)
    # (0.05232052105229076, 0.9901890646961664)
    # (0.05244478365270103, 0.9370588579235256)
    # (0.0524495055035847, 0.983689798246277)
    # (0.05249380483859923, 0.949329628594422)
    # (0.052495165569026295, 0.9787674192460226)
    # (0.05251170367729373, 0.9775743713499724)
    # (0.052542355002426516, 0.9694796758766311)
    # (0.05256323698090344, 0.9677430276022098)
    # (0.052571715378179784, 0.9740260868060651)
    # (0.05258097881224097, 0.9901955388132166)
    # (0.05278562917941954, 0.9722452049270109)
    # (0.05283391766431855, 0.9654492076396217)
    # (0.05290732732633265, 0.96677506888776)
    # (0.052907408737554784, 0.9405448752203995)
    # (0.052981213825504955, 0.9709549685823896)
    # (0.0531259397181069, 0.9736760482803571)
    # (0.05314292558809606, 0.9436964999863696)
    # (0.05320555407826493, 0.9790615943347899)
    # (0.05322470897581519, 0.9887342326849858)
    # (0.05324025270415515, 0.9490009618226984)
    # (0.05361729133419874, 0.9626863089932449)
    # (0.053693724841606325, 0.9812847147267059)
    # (0.0536956787109375, 0.964925731591066)
    # (0.05371019316882622, 0.9761116690822437)
    # (0.05372484718881002, 0.9843043397769686)
    # (0.0538279603167278, 0.9757061813447921)
    # (0.05385430847726217, 0.9699494189402018)
    # (0.05385572154347489, 0.9557338432830096)
    # (0.05402815051195098, 0.9856918069977034)
    # (0.054049701225466845, 0.9756272750783179)
    # (0.05405136434043326, 0.9948991609841543)
    # (0.054156861654142054, 0.964648899197757)
    # (0.05428791046142578, 0.9721428727345898)
    # (0.05431798027782905, 0.9775003120748554)
    # (0.05433163991788539, 0.9766705675654929)
    # (0.0544331480817097, 0.9836696474837331)
    # (0.05445843789635635, 0.9700123529300566)
    # (0.05448801924542683, 0.9837308354176323)
    # (0.05449805608609828, 0.978693687910002)
    # (0.054511070251464844, 0.9613507477995683)
    # (0.05451865312529773, 0.9590477420160438)
    # (0.054538517463498, 0.9914906203415744)
    # (0.054731543471173545, 0.9598418451763653)
    # (0.054732066829030104, 0.9401676311005986)
    # (0.054732066829030104, 0.9590381895830183)
    # (0.05482864961391542, 0.9775495286207774)
    # (0.05486155719291873, 0.9614258918702911)
    # (0.05502339107234303, 0.965390917361093)
    # (0.055042150543957225, 0.9825553316531384)
    # (0.055120363468077124, 0.9848672080082066)
    # (0.055120619331918114, 0.9597809094298542)
    # (0.055263402985363475, 0.9740741597371965)
    # (0.055461453228462035, 0.9790863255736166)
    # (0.0554658145439334, 0.9896215147389488)
    # (0.055643221227134144, 0.9717006684102264)
    # (0.05572913914192014, 0.9747546463711811)
    # (0.0558500522520484, 0.9811393948190422)
    # (0.05591225042575743, 0.9856958507499647)
    # (0.05594757708107553, 0.9692727526465448)
    # (0.05619118853313167, 0.9873159655569413)
    # (0.05629341776778058, 0.9851701674821025)
    # (0.056434212661371, 0.9943720866633974)
    # (0.0564509077769954, 0.9732479018334385)
    # (0.05648244299539706, 0.9759202666707055)
    # (0.05650704081465558, 0.9906583496440918)
    # (0.05652402668464475, 0.9835366719701719)
    # (0.056628471467553114, 0.986753020340308)
    # (0.0567262928660323, 0.9955887291643924)
    # (0.05692144719565787, 0.965103840732611)
    # (0.05716424453549269, 0.9771075486656575)
    # (0.05723909052406869, 0.9931082041518466)
    # (0.05731016833607743, 0.9270978945907252)
    # (0.057310709139195885, 0.9641280403489705)
    # (0.057651182500327504, 0.9541428600795017)
    # (0.057841824322212035, 0.9651346138747969)
    # (0.05787387126829566, 0.9762598171048746)
    # (0.05789575344178735, 0.9823380506401251)
    # (0.05792547435295291, 0.9552949483686594)
    # (0.058380126953125, 0.9534425377839789)
    # (0.058380568899759434, 0.9686570000678781)
    # (0.058380568899759434, 0.9787559962897303)
    # (0.058380568899759434, 0.9834114659623553)
    # (0.058399235329976894, 0.9260648706087702)
    # (0.05841266818162871, 0.9707405860705692)
    # (0.05841668059186238, 0.9565014679758462)
    # (0.05842086745471489, 0.9596062309048187)
    # (0.05845383899967845, 0.9730848143284356)
    # (0.058550613682444505, 0.9794447031303319)
    # (0.058568070574504576, 0.9719965266784732)
    # (0.05857521150170303, 0.9780483226809168)
    # (0.05857537432414729, 0.9773718457387381)
    # (0.0586001233356755, 0.9686983217775148)
    # (0.05868401178499547, 0.9831841549102983)
    # (0.058818107698021864, 0.9529122747704324)
    # (0.05881864850114032, 0.9724140203819447)
    # (0.05897123639176532, 0.9776875858448447)
    # (0.05898824552210366, 0.9741648578069655)
    # (0.05898882703083318, 0.948951472712751)
    # (0.059109972744453246, 0.9801019214339111)
    # (0.05919282029314739, 0.9676902956935036)
    # (0.059243062647377574, 0.9854698984487632)
    # (0.059572167512847156, 0.97270715234118)
    # (0.0595903745511683, 0.9879765035071434)
    # (0.05959307856676055, 0.9581319511439292)
    # (0.0595954220469405, 0.960729529422913)
    # (0.059612059011691955, 0.9659853559948053)
    # (0.05974695159167778, 0.9812561998795949)
    # (0.05980637015365973, 0.9897337926632584)
    # (0.05984422637195122, 0.926960828971603)
    # (0.059937453851467225, 0.9756405339417096)
    # (0.059937826017054115, 0.9929182120051059)
    # (0.05996278437172494, 0.9771197179128779)
    # (0.06008290081489377, 0.9909114362924686)
    # (0.06013242209829935, 0.9798214375288679)
    # (0.06013242209829935, 0.9911845334531)
    # (0.06033127482344464, 0.9527936601929566)
    # (0.060341189547282896, 0.9862611335148488)
    # (0.06037345746668374, 0.9810218030166103)
    # (0.060432341040634524, 0.9787863517810963)
    # (0.06043583009301162, 0.9644899720694493)
    # (0.060569949266387195, 0.9534645283891187)
    # (0.06060972446348609, 0.993516175392331)
    # (0.060613213515863185, 0.9671048157843343)
    # (0.06068421573173709, 0.9548286212737841)
    # (0.06071523340736947, 0.9756584430035249)
    # (0.06071546601086128, 0.9665020665467607)
    # (0.0607204902462843, 0.9771741089909121)
    # (0.06096449130918921, 0.9442495537459278)
    # (0.06101258789620748, 0.981883922953968)
    # (0.061046170025337035, 0.9902537165779562)
    # (0.06106420842612662, 0.9720414556610827)
    # (0.06108028714249774, 0.9797907908323646)
    # (0.0612988820890101, 0.9800293355794754)
    # (0.0614681709103468, 0.9456855698577041)
    # (0.061648851487694716, 0.9300172074128075)
    # (0.061790158108967104, 0.970433051204486)
    # (0.061809539794921875, 0.9400813363219843)
    # (0.061810307386444836, 0.9854134897011702)
    # (0.061834527225029176, 0.95495229728965)
    # (0.061835428563559926, 0.9837474966018531)
    # (0.06187670986826827, 0.9527376371723891)
    # (0.06202907097048876, 0.9531525399930377)
    # (0.06202910004592523, 0.9631751724199754)
    # (0.06205043560121118, 0.9721025560083221)
    # (0.06207397507458198, 0.9702877778361924)
    # (0.06215197284047196, 0.9693596316221798)
    # (0.06227223466082317, 0.9775592574318066)
    # (0.062355169435826745, 0.9800468494681478)
    # (0.06239393862282357, 0.9650061564172815)
    # (0.06259453587415742, 0.9445118097604472)
    # (0.06261301622158144, 0.9594244503426093)
    # (0.06261301622158144, 0.9703961077360287)
    # (0.06261301622158144, 0.9739952466018952)
    # (0.0626134058324302, 0.9692515996552145)
    # (0.06261941281760611, 0.9929183688238011)
    # (0.0626372127998166, 0.9756461698436449)
    # (0.06265276815833115, 0.9738242925456885)
    # (0.062656193244748, 0.9491989864508373)
    # (0.06302547454833984, 0.9402066414193678)
    # (0.06302773080221037, 0.9772246946265997)
    # (0.06302856817478086, 0.9836941234287897)
    # (0.06304875815786966, 0.9854929606879411)
    # (0.06306550560927973, 0.9976018409967176)
    # (0.06308429997141768, 0.9707964402487037)
    # (0.06313770573313643, 0.964792347436836)
    # (0.06326519570699553, 0.9662731129021792)
    # (0.06328530427886218, 0.9716662197755741)
    # (0.06334300739009206, 0.9358533923631137)
    # (0.0634155331588373, 0.9812278635968711)
    # (0.06368295157827981, 0.9933026780023633)
    # (0.06370410686585962, 0.9723611671007286)
    # (0.06383458579458841, 0.9377282749267611)
    # (0.06385835205636374, 0.9682413159654387)
    # (0.06391050757431402, 0.9724715009718261)
    # (0.0640968869372112, 0.987582131689295)
    # (0.06410139362986494, 0.9498749204905776)
    # (0.06410355684233875, 0.9754223535455877)
    # (0.06450965927868355, 0.9828396409445067)
    # (0.06451018263654011, 0.9647706309580679)
    # (0.06451018263654011, 0.9812795038583133)
    # (0.06451038034950815, 0.9690603086621756)
    # (0.06451038034950815, 0.9843617521261562)
    # (0.06451041524003191, 0.9734243051310333)
    # (0.06470502876653904, 0.9735629854718871)
    # (0.06500497096922339, 0.9554405475451925)
    # (0.06502114272699124, 0.9705846551695919)
    # (0.06504666514512969, 0.9785190422145504)
    # (0.06532139894438953, 0.9591215302116559)
    # (0.06533721598183237, 0.9685772336682928)
    # (0.06533721598183237, 0.9708904147500609)
    # (0.06534003629917051, 0.9783797480697736)
    # (0.06537062947343035, 0.9847970962115368)
    # (0.06538623716773057, 0.9757474843040941)
    # (0.06539042403058308, 0.9564604228113864)
    # (0.06540605498523247, 0.9485941705446828)
    # (0.06555618309393162, 0.9440831385759005)
    # (0.06555638662198694, 0.9763569446628193)
    # (0.06555699720615293, 0.971987261687395)
    # (0.06563258752590273, 0.9853480433217776)
    # (0.0656769624570521, 0.9823594351110969)
    # (0.06567868953797876, 0.971951871811891)
    # (0.06578889707239663, 0.9842051591782214)
    # (0.0658236596642471, 0.9690049998177991)
    # (0.06582404346000857, 0.965168694182482)
    # (0.06585905028552544, 0.9979707712397705)
    # (0.06586223113827588, 0.9882907925735057)
    # (0.0659334601425543, 0.9517822806329317)
    # (0.06606650933986757, 0.9601794816544034)
    # (0.06616444704009265, 0.9492338633844851)
    # (0.06616843618997713, 0.9965649373124077)
    # (0.06616938986429353, 0.9542046308045317)
    # (0.06619548797607422, 0.9346754674049884)
    # (0.06619884909653082, 0.9885580477922923)
    # (0.06621980667114258, 0.9747074809030305)
    # (0.06628208625607374, 0.945555485347373)
    # (0.0663335672238978, 0.9613108733798381)
    # (0.06635852557856863, 0.9544624635429082)
    # (0.06636231120039777, 0.9730349288948802)
    # (0.06640754094937952, 0.962432842955304)
    # (0.06640774447743486, 0.9530489480912832)
    # (0.066446618336003, 0.9321607374186437)
    # (0.06655353453101182, 0.9814959119335838)
    # (0.06655384854572576, 0.9731457191752242)
    # (0.06693647547465999, 0.9629402266280396)
    # (0.06696096280725991, 0.9862595015423926)
    # (0.06699095702752834, 0.9779266946491643)
    # (0.06701537457908072, 0.9688455302298427)
    # (0.06701554321661228, 0.9865255446926218)
    # (0.06704011777552163, 0.9386196439529972)
    # (0.06725889880482744, 0.9811034494712919)
    # (0.06729085270951433, 0.9633872592419788)
    # (0.06733510552383051, 0.9708766016520249)
    # (0.06742819344125144, 0.9610798757753996)
    # (0.06742819344125144, 0.9947292950874095)
    # (0.067429426239758, 0.9883409917268587)
    # (0.06742984492604326, 0.9789673028296529)
    # (0.06743612522032202, 0.963985394915244)
    # (0.06744442916497952, 0.9383996534168346)
    # (0.06755860840401999, 0.9584086369015372)
    # (0.06763924040445467, 0.9720429657227823)
    # (0.06764803281644495, 0.9345708511826119)
    # (0.06784461184245784, 0.9824793672113229)
    # (0.06784797296291445, 0.9813767896523455)
    # (0.06789028353807403, 0.9721156991684058)
    # (0.06811066371638601, 0.9851794184988113)
    # (0.0681109079500524, 0.9585201301644409)
    # (0.06811473427749262, 0.9517051060047051)
    # (0.06814404231746023, 0.9855901516777766)
    # (0.06829261779785156, 0.9646848109599159)
    # (0.06830510860536157, 0.9727071752264147)
    # (0.06831076087021246, 0.9695243825287573)
    # (0.06838842717612661, 0.9780059108960825)
    # (0.06840140645096941, 0.9731774333655071)
    # (0.06840202866531, 0.985474020008081)
    # (0.06840936149038919, 0.9491230739173745)
    # (0.0687916685895222, 0.9644766014425982)
    # (0.06896161451572325, 0.9547730716152538)
    # (0.06900170954262339, 0.9322165458130679)
    # (0.06903507069843572, 0.9763269442454894)
    # (0.06905867413776677, 0.974185814714208)
    # (0.06908227757709783, 0.9678781152987741)
    # (0.06913278742534358, 0.9728056681875468)
    # (0.06928783509789443, 0.9931899176893154)
    # (0.06930203554106922, 0.9793714733236983)
    # (0.06932662173015315, 0.980394792278962)
    # (0.06945810085389673, 0.9453852001227733)
    # (0.06947308051876905, 0.9699895194023747)
    # (0.06947811638436667, 0.9858607224448509)
    # (0.06958654450207222, 0.9510984409470644)
    # (0.06961847514640994, 0.9819500331946147)
    # (0.07005668267971132, 0.9706038880112349)
    # (0.07005668267971132, 0.9746272915702375)
    # (0.07015400398068311, 0.9776621148374967)
    # (0.07017126315977515, 0.9582915541208408)
    # (0.0702130154865544, 0.9766144921830759)
    # (0.07023517678423626, 0.9346262637340973)
    # (0.07025139506270246, 0.9784561889325014)
    # (0.07025139506270246, 0.9824112995892191)
    # (0.07064048836870891, 0.9791240657073667)
    # (0.07069139945797803, 0.9667103819659587)
    # (0.0708357415548185, 0.9619712865962097)
    # (0.07093215570217226, 0.9621871492022082)
    # (0.07094492563387243, 0.9954013631462245)
    # (0.0710294304824457, 0.9726288872685331)
    # (0.07110183413435774, 0.9576428581203058)
    # (0.07110312508373726, 0.9640238851550846)
    # (0.07114314451450254, 0.9697362159946916)
    # (0.07117550547530012, 0.9830036264017007)
    # (0.07124699615850681, 0.9689055766862587)
    # (0.07151467044179033, 0.9529863050622416)
    # (0.07151562993119402, 0.9375188825588205)
    # (0.07151568808206697, 0.9652654528910655)
    # (0.07158860346166099, 0.9488430706199928)
    # (0.07180783806777583, 0.975855993745283)
    # (0.07180804741091845, 0.9536681258446416)
    # (0.07195392469080483, 0.9911468070511572)
    # (0.07200098037719727, 0.9707922606796396)
    # (0.07200248648480671, 0.9729668441804364)
    # (0.07200892378644246, 0.9583468240827918)
    # (0.07202464778248857, 0.9823821454807491)
    # (0.0720321783205358, 0.9817363126715155)
    # (0.07206995312760515, 0.9821311212707202)
    # (0.07210533211870891, 0.9576483737755412)
    # (0.07210646606073147, 0.9899250225206568)
    # (0.07212319025179235, 0.9638362354543571)
    # (0.07217003077995486, 0.9323501735929053)
    # (0.07219775130109089, 0.9717262324844576)
    # (0.07222103491062071, 0.9787591434800241)
    # (0.07224588859372022, 0.9618896443478779)
    # (0.07236745299362554, 0.9660759839089634)
    # (0.07265777122683642, 0.9398584902500795)
    # (0.07265933548531882, 0.9870377731398552)
    # (0.072975449445771, 0.9809107558189738)
    # (0.07299568594955816, 0.9734377181657842)
    # (0.07302416824712986, 0.945586286830265)
    # (0.07302461019376429, 0.9694245921490369)
    # (0.07302677340623809, 0.9617101175809353)
    # (0.07304854509307117, 0.9796012833256902)
    # (0.07305974495120166, 0.9761426355674758)
    # (0.07311431954546672, 0.9688151853659464)
    # (0.07312216991331519, 0.9713224774612588)
    # (0.07316705657214653, 0.9530001167745034)
    # (0.073506029640756, 0.9741454370053924)
    # (0.07361446938863615, 0.9787023294988391)
    # (0.07370623146615378, 0.9753080143779942)
    # (0.0738173461541897, 0.9879312836295)
    # (0.0738401529265613, 0.9977532613249294)
    # (0.07389966452993997, 0.9932347880498309)
    # (0.07390056586847073, 0.9698752119856108)
    # (0.07392418093797637, 0.9796419414727611)
    # (0.07394725520436357, 0.9522068869243251)
    # (0.07394872060636194, 0.9463234899200794)
    # (0.07396418873856707, 0.9848833207214813)
    # (0.0739972009891417, 0.9660850472410178)
    # (0.0742630842255383, 0.9724596627375263)
    # (0.07441834705631907, 0.9879500312979462)
    # (0.07443383844887339, 0.9816545868875213)
    # (0.07443509450772913, 0.9867154621666812)
    # (0.07449161715623809, 0.9476175225150595)
    # (0.0747111134412812, 0.9738307797409378)
    # (0.07473757790356148, 0.9536607827099057)
    # (0.07484697132575803, 0.9794738057184962)
    # (0.07487261004564238, 0.9678549727657195)
    # (0.07487901827184165, 0.9788270095844728)
    # (0.07490067365692883, 0.9457122652078913)
    # (0.0749208869003668, 0.9825740215440053)
    # (0.07492158471084223, 0.9821875787120633)
    # (0.0749290570980165, 0.9860978049615023)
    # (0.07494577547399009, 0.9788790246755139)
    # (0.07495159056128525, 0.9702459552179749)
    # (0.07497307149375357, 0.9807091069751528)
    # (0.07516482981239878, 0.9671701384664761)
    # (0.07516482981239878, 0.9911637007917202)
    # (0.07531140490276057, 0.9845576637238244)
    # (0.07548081002584318, 0.9670077016505234)
    # (0.0756724171522187, 0.9377575080976894)
    # (0.07589386730659299, 0.9727868641010838)
    # (0.07589409991008479, 0.9894635450168591)
    # (0.07589421621183069, 0.9797528873657546)
    # (0.07589473956968726, 0.9838824860311952)
    # (0.07590084541134717, 0.986555840720482)
    # (0.07591288264204817, 0.947178322040651)
    # (0.07592286133184666, 0.9459820223135903)
    # (0.07602123516361887, 0.9838424238080711)
    # (0.07608963803547185, 0.9730580881292872)
    # (0.07612155123454768, 0.9718191975211665)
    # (0.07618436580751001, 0.9620742077566994)
    # (0.0765025208636028, 0.961009104024537)
    # (0.07654598282604683, 0.9788442231116556)
    # (0.07678159853307212, 0.971474613640916)
    # (0.07681912910647509, 0.9851510387137554)
    # (0.0768677781267864, 0.9896135656389161)
    # (0.07689615575278677, 0.9685937364185895)
    # (0.07692685941370522, 0.9838239800178542)
    # (0.0770619322613972, 0.9841575586428979)
    # (0.07728972086092321, 0.975341570540699)
    # (0.07743146942883003, 0.9646365363217272)
    # (0.07765179145626905, 0.9620890195868024)
    # (0.07779205136182832, 0.9747755911627402)
    # (0.07779976216758169, 0.9285946793201838)
    # (0.07781591648008765, 0.9709235076294473)
    # (0.07782652319931402, 0.9601579185853824)
    # (0.07784029332602896, 0.9723018534342966)
    # (0.07784052592952077, 0.9768502697647168)
    # (0.07784122373999619, 0.9678879967149414)
    # (0.07785101634700124, 0.9679814563432848)
    # (0.07785305744264184, 0.9781655948365977)
    # (0.07840468243854802, 0.9667389305870625)
    # (0.07857054035838057, 0.9756655475228165)
    # (0.07861886373380335, 0.9851762041999237)
    # (0.0786210967273247, 0.98757821048212)
    # (0.07863077303258384, 0.9695481774777058)
    # (0.07881350633574695, 0.9397595886685134)
    # (0.07884304697920637, 0.9683123342016082)
    # (0.07915861432145281, 0.9601059499811476)
    # (0.07917826350142317, 0.9574938682886946)
    # (0.07917872289331948, 0.9692463075631249)
    # (0.07931174301519626, 0.9712296702275867)
    # (0.07939799238995808, 0.9573695394602324)
    # (0.0793992949695122, 0.946682477236799)
    # (0.079470669350973, 0.9457182073892373)
    # (0.079569176929753, 0.9752811580630133)
    # (0.07969412571046411, 0.9799662103761614)
    # (0.07969662038291372, 0.982525926253566)
    # (0.07971907243496035, 0.9858559756895734)
    # (0.07993412599330996, 0.9876856692687894)
    # (0.07995900293675864, 0.9785056950108848)
    # (0.0801754463009718, 0.9647592807087332)
    # (0.08022282763225276, 0.9490469222877977)
    # (0.08066160504410906, 0.9738443694837985)
    # (0.08070282819794446, 0.9584358897991498)
    # (0.08071104491629251, 0.9866783233270062)
    # (0.08095345846036585, 0.9622397107125663)
    # (0.08097764922351372, 0.9848812986001373)
    # (0.08103127595854968, 0.9899153331530822)
    # (0.08113544161726789, 0.9687714943079199)
    # (0.08144369357969702, 0.946250789530289)
    # (0.0815859945808969, 0.9326115380084313)
    # (0.08161388955465178, 0.9848864152870785)
    # (0.0816265897053044, 0.9635037803784388)
    # (0.08187860395850205, 0.9841415161665718)
    # (0.08258293314677913, 0.9716479042448619)
    # (0.08270392766812952, 0.9653697451930092)
    # (0.08270496275366807, 0.9797194565889067)
    # (0.0827076842145222, 0.9868067089163476)
    # (0.08290769995712652, 0.9463634842507237)
    # (0.08293327471105064, 0.9714708108732819)
    # (0.08319026667897295, 0.9793045836894345)
    # (0.08343510511444836, 0.98760890609511)
    # (0.08343652981083567, 0.9297081711036935)
    # (0.08350935214903296, 0.9506284152803709)
    # (0.08353451984684641, 0.9764462019637676)
    # (0.08404838748094512, 0.9830585099294519)
    # (0.08428646296989627, 0.9938934319909881)
    # (0.08435344696044922, 0.9784957755934429)
    # (0.08458063660598383, 0.9673960748367749)
    # (0.08469186178067835, 0.987700941719162)
    # (0.08474489537681021, 0.9915494757230953)
    # (0.08513741376923352, 0.9872874793444734)
    # (0.0855028047794249, 0.9717668253874588)
    # (0.08581896526057546, 0.9775693007956522)
    # (0.08590213845415813, 0.9691489769061769)
    # (0.0859665754364758, 0.9640752316432228)
    # (0.08598655607642197, 0.9611902582208712)
    # (0.08666889841963606, 0.9660841020878642)
    # (0.08684206008911133, 0.9309723360947724)
    # (0.08686163367294683, 0.9776139428487558)
    # (0.08757012064863996, 0.9611237273485853)
    # (0.08759252036490091, 0.9712818623985446)
    # (0.08765709109422637, 0.9434980412723165)
    # (0.08768827159230302, 0.9821760748566903)
    # (0.08823273240066157, 0.9505613805941456)
    # (0.08828736514579959, 0.9544051701206991)
    # (0.08844098812196313, 0.9573051050518024)
    # (0.08844601235738615, 0.9481881555687756)
    # (0.08844684972995664, 0.9935186022696153)
    # (0.08849671991859995, 0.9913061731840535)
    # (0.0887380227809999, 0.9624540854335071)
    # (0.08910154133308225, 0.9841915229116948)
    # (0.08934555984124905, 0.9474294025368416)
    # (0.08990511661622583, 0.9656663506603473)
    # (0.09058779041941573, 0.9674012568876216)
    # (0.09090198540106052, 0.9742943908731135)
    # (0.09092565280635183, 0.9697684822874808)
    # (0.09107243142476897, 0.9406347424648451)
    # (0.09107410616990996, 0.9853958406256026)
    # (0.09151101693874453, 0.9510468383768371)
    # (0.09194853247665777, 0.9517630990201335)
    # (0.09194853247665777, 0.9824493696917659)
    # (0.09199172694508623, 0.9833247706719914)
    # (0.09243499941942168, 0.9527431164972422)
    # (0.09272867877308916, 0.9446155834161915)
    # (0.09280558330256765, 0.9679278953427137)
    # (0.09394891087601824, 0.959289511613968)
    # (0.0945284308456793, 0.9731549373382927)
    # (0.09455234248463701, 0.983383819754377)
    # (0.09455317985720751, 0.9753952354933807)
    # (0.09486558960705269, 0.9823084736505026)
    # (0.09520900540235566, 0.9860686785092941)
    # (0.095353010224133, 0.9822977071915946)
    # (0.09579428812352622, 0.9834626756702036)
    # (0.09581674017557283, 0.9772143811657009)
    # (0.09613532554812548, 0.9820773870184688)
    # (0.09615587606662657, 0.9700388450860832)
    # (0.09632715364781821, 0.9924546422637529)
    # (0.09635808991222847, 0.947572744345991)
    # (0.09676516928323885, 0.9635831245680364)
    # (0.09705678428091653, 0.9677086654928435)
    # (0.0973003666575362, 0.976273827488354)
    # (0.09771405196771389, 0.954392002936414)
    # (0.09771495912133193, 0.9732641296200553)
    # (0.09866225428697539, 0.9488638377945603)
    # (0.09866497574782954, 0.9889102590510913)
    # (0.09878722632803567, 0.9762907016074598)
    # (0.09888312874770747, 0.9691840823248358)
    # (0.09921562380907012, 0.9593776254461597)
    # (0.09927796154487424, 0.9912066654195055)
    # (0.1005604732327345, 0.9581966934196499)
    # (0.10091735095512576, 0.9629707017351262)
    # (0.10119182307545732, 0.9697357924895639)
    # (0.10150799518678247, 0.9533478869814871)
    # (0.10338806524509336, 0.9625343974422352)
    # (0.10411332293254573, 0.97532128181568)
    # (0.10535612338926734, 0.9322432306609204)
